<?php

namespace projetPHP\idkdoBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

use projetPHP\idkdoBundle\Entity\Cadeau;
use projetPHP\idkdoBundle\Entity\Genre;
use projetPHP\idkdoBundle\Entity\Personne;
use projetPHP\idkdoBundle\Entity\Occasion;
use projetPHP\idkdoBundle\Entity\Compte;
use projetPHP\idkdoBundle\Entity\Commentaire;

class MainController extends Controller {
    
    public function indexAction(){
        $repository = $this->getDoctrine()
                    ->getEntityManager()
                    ->getRepository('projetPHPidkdoBundle:Cadeau');
        $liste_cadeaux = $repository->findAllOrderedByDate();
        return $this->render('projetPHPidkdoBundle:Default:index.html.twig', array('cadeaux' => $liste_cadeaux));
    }

    // $id : id du compte
    public function voirCadeauxCompteAction($id){
		$session = $this->get('session');
		if(($session->get('util'))==null){
			// On redirige vers l'accueil si non connecté
			return $this->redirect($this->generateUrl('projetPHPidkdoBundle_homepage'));
		}
	
        $repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Cadeau');
        $liste_cadeaux = $repository->findBy(array('compte' => $id), array('date' => 'desc'));

        $repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Compte');
        $compte = $repository->find($id);

        if($compte == null)
            return $this->erreurAction("Le compte n'existe pas !");

        return $this->render('projetPHPidkdoBundle:Default:listeCadeauCompte.html.twig', array('cadeaux' => $liste_cadeaux, 'compte' => $compte));
    }
	
	public function voirAction($id){
        $repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Cadeau');
        $cadeau = $repository->find($id);

        if($cadeau == null)
            return $this->erreurAction("Le cadeau n'existe pas ou a été supprimé !");
			
		// On récupère la requête et la session.
		$request = $this->get('request');
		$session = $this->get('session');
		
		// On vérifie qu'elle est de type « POST » et que l'utilisateur est connecté.
		if( $request->getMethod() == 'POST' && (($session->get('util'))!=null))
		{
			$session = $this->get('session');
			$request = $request->request;
			
			$commentaire = new Commentaire();
			$note = $request->get('note');
			$texte = $request->get('texte');
			
			if(!empty($texte)) {
				$commentaire->setNote($note);
				$commentaire->setTexte($texte);
				$commentaire->setDate(new \Datetime());
				$commentaire->setCadeau($cadeau);
				$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Compte');
					$commentaire->setCompte($repository->find($session->get('util')->getId()));
					
				// On enregistre notre objet dans la BDD
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($commentaire);
                $em->flush();
				
				$session->setFlash('info', 'Commentaire posté');
			} else {
				$session->setFlash('info', 'Un commentaire nécessite un texte');
			}
		}
		
		// true si l'utilisateur est connecté, afin d'afficher ou non le formulaire d'ajout de commentaire
		$connected = (($this->get('session')->get('util'))!=null);
		
		$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Commentaire');
        $liste_commentaires = $repository->findByCadeau($cadeau->getId());
		
		$evaluations = array();
		foreach ($liste_commentaires as $commentaire) {
			$stars = $commentaire->getNote();
			$halfstar = (int)($commentaire->getNote()*2)%2;
			
			for($i=0; $i<$stars; $i++) { $evaluations[$commentaire->getId()][] = "star.png"; }
			if ($halfstar == 1) { $evaluations[$commentaire->getId()][] = "star_half.png"; }
			for($i=$stars+$halfstar; $i<5; $i++) { $evaluations[$commentaire->getId()][] = "star_empty.png"; }
		}

        return $this->render('projetPHPidkdoBundle:Default:detailCadeau.html.twig', array('cadeau' => $cadeau, 'liste_commentaires' => $liste_commentaires, 'connected' => $connected, 'evaluations' => $evaluations));
    }
	
    public function erreurAction($erreur="Une erreur est survenue"){
        return $this->render('projetPHPidkdoBundle:Default:erreur.html.twig', array('erreur' => $erreur));
    }

	public function ajouterAction(){
		$session = $this->get('session');
		if(($session->get('util'))==null){
			// On redirige vers l'accueil si non connecté
			return $this->redirect($this->generateUrl('projetPHPidkdoBundle_homepage'));
		}
	
		$repository = $this->getDoctrine()
					->getEntityManager()
					->getRepository('projetPHPidkdoBundle:Genre');
        $liste_genres = $repository->findAll();
		
		$repository = $this->getDoctrine()
					->getEntityManager()
					->getRepository('projetPHPidkdoBundle:Occasion');
        $liste_occasions = $repository->findAll();
		
		$repository = $this->getDoctrine()
					->getEntityManager()
					->getRepository('projetPHPidkdoBundle:Personne');
        $liste_personnes = $repository->findAll();
		
		// On récupère la requête.
        $request = $this->get('request');
		
		// On vérifie qu'elle est de type « POST ».
		if( $request->getMethod() == 'POST' )
        {
			$request = $request->request;
			
			$nom = $request->get('nom');
			$description = $request->get('description');
			if (!isset($description)) $description = '';
			$estOffert = $request->get('estOffert');
			$id_offrant = $request->get('id_offrant');
			$id_receveur = $request->get('id_receveur');
			$id_occasion = $request->get('id_occasion');
			$genres = $request->get('genres');
			
			if (!empty($nom) && !empty($id_offrant) && !empty($id_receveur) && !empty($id_occasion) && !empty($genres)) {
				
				// On crée notre objet cadeau
				$cadeau = new Cadeau();
				$cadeau->setDate(new \Datetime());
				$cadeau->setTitre($nom);
				$cadeau->setDescription($description);
				$cadeau->setEstOffert($estOffert);
				$cadeau->setLienPhoto("");
				
				if(isset($_FILES['image'])) {
					$image = $_FILES['image'];
					$fichier = basename($image['name']);
					if(move_uploaded_file($image['tmp_name'], "img/cadeaux/".$fichier))
					{
						$cadeau->setLienPhoto($fichier);
					}
				}
				
				$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Compte');
					$cadeau->setCompte($repository->find($session->get('util')->getId()));
				
				$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Occasion');
					$cadeau->setOccasion($repository->find($id_occasion));
				
				$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Genre');
					foreach ($genres as $id_genre) $cadeau->addGenre($repository->find($id_genre));
				
				$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Personne');
					$cadeau->setPersonneOffrant($repository->find($id_offrant));
					$cadeau->setPersonneRecevant($repository->find($id_receveur));
				
				// On enregistre notre objet dans la BDD
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($cadeau);
                $em->flush();
				
				// On redirige vers le détail du cadeau
				$session->setFlash('info', 'Cadeau bien ajouté');
				return $this->redirect($this->generateUrl('projetPHPidkdoBundle_voirCadeauCompte', array('id' => $session->get('util')->getId())));
			} else {
				$session->setFlash('info', 'Tous les champs marqués d\'un * sont obligatoires');
			}
		}
		
        return $this->render('projetPHPidkdoBundle:Default:ajoutCadeau.html.twig', array('liste_genres' => $liste_genres,'liste_occasions' => $liste_occasions,'liste_personnes' => $liste_personnes));
    }

    public function rechercheAction(){
        $request = $this->get('request');
		
		$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Personne');
        $liste_personnes = $repository->findAll();
		
		$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Genre');
        $liste_genres = $repository->findAll();
		
		$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Occasion');
        $liste_occasions = $repository->findAll();
		
		// On récupère la requête.
        $request = $this->get('request');
		
		// On vérifie qu'elle est de type « POST ».
		if( $request->getMethod() == 'POST' )
        {
			$request = $request->request;
			$titre = $request->get('titre');
			$id_offrant = $request->get('id_offrant');
			$id_receveur = $request->get('id_receveur');
			$id_occasion = $request->get('id_occasion');
			$genres = $request->get('genres');
			$note = $request->get('note');
			$opp = $request->get('opp');
			
			$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Cadeau');
			$criteres = array();
			
			if(!empty($titre)) $criteres['titre'] = $titre;
			if(!empty($id_offrant)) $criteres['personneOffrant'] = $id_offrant;
			if(!empty($id_receveur)) $criteres['personneRecevant'] = $id_receveur;
			if(!empty($id_occasion)) $criteres['occasion'] = $id_occasion;
			if(!empty($genres)) $criteres['genres'] = $genres;
			if(!empty($note) && !empty($opp)) $criteres['note'] = array('note' => $note, 'opp' => $opp);
			
			$liste_cadeaux = $repository->findByCriteres($criteres, array('date' => 'desc'));
			
			if(empty($liste_cadeaux))
				return $this->erreurAction("Aucun résultat n'a été trouvé.");
			
			$repository = $this->getDoctrine()->getEntityManager()->getRepository('projetPHPidkdoBundle:Commentaire');
			$evaluations = array();
			foreach ($liste_cadeaux as $cadeau) {
				$notes = array();
				foreach ($repository->findByCadeau($cadeau->getId()) as $commentaire) $notes[] = $commentaire->getNote();
				$evaluations[$cadeau->getId()] = "";
				if (count($notes) > 0) {
					$stars = floor(array_sum($notes)/count($notes));
					$halfstar = (int)(array_sum($notes)/count($notes)*2)%2;
					
					for($i=0; $i<$stars; $i++) { $evaluations[$cadeau->getId()][] = "star.png"; }
					if ($halfstar == 1) { $evaluations[$cadeau->getId()][] = "star_half.png"; }
					for($i=$stars+$halfstar; $i<5; $i++) { $evaluations[$cadeau->getId()][] = "star_empty.png"; }
				}
			}
			
			return $this->render('projetPHPidkdoBundle:Default:resultatRecherche.html.twig', array('cadeaux' => $liste_cadeaux, 'evaluations' => $evaluations));
        }
		return $this->render('projetPHPidkdoBundle:Default:rechercheAvancee.html.twig', array('liste_genres' => $liste_genres,'liste_occasions' => $liste_occasions,'liste_personnes' => $liste_personnes));
    }

}
